// 景点讲解的js文件
import Dialog from '@vant/weapp/dialog/dialog';

Page({
  data: {
    baseUrl: 'https://jingqu.kuxia.top/',
    scenicId: 3,
    explainData: {},
    videoUrl: '',
    audioUrl: '',
    imageUrl: '',
    contentNodes: [],
    nbTitle: '景点讲解',
    nbFrontColor: '#ffffff',
    nbBackgroundColor: '#000000',
    nbLoading: false,
    statusBarHeight: 0, // 状态栏高度
    navHeight: 0 // 导航栏总高度
  },

  onLoad: function (options) {
    // 设置自定义导航栏高度
    this.setNavBarHeight();
    
    // 页面加载时弹出确认框提示用户开启蓝牙
    this.showBluetoothDialog();
  },

  // 设置自定义导航栏高度
  setNavBarHeight() {
    const systemInfo = wx.getSystemInfoSync();
    const statusBarHeight = systemInfo.statusBarHeight;
    const navHeight = statusBarHeight + 44; // 44是导航栏标准高度
    
    this.setData({
      statusBarHeight: statusBarHeight,
      navHeight: navHeight
    });
  },

  showBluetoothDialog: function() {
    Dialog.confirm({
      title: '蓝牙开启提示',
      message: '为了更好的体验，需要您开启蓝牙功能，是否现在开启？',
    })
      .then(() => {
        // 用户点击确定，检查蓝牙状态
        this.checkBluetoothStatus();
      })
      .catch(() => {
        // 用户点击取消，退出此页面
        wx.navigateBack({
          delta: 1,
          fail: () => {
            // 如果无法返回上一页，则跳转到首页
            wx.switchTab({
              url: '/pages/index/index'
            });
          }
        });
      });
  },

  checkBluetoothStatus: function() {
    // 初始化蓝牙模块
    wx.openBluetoothAdapter({
      success: (res) => {
        // 初始化成功，获取蓝牙状态
        this.getBluetoothState();
      },
      fail: (error) => {
        // 初始化失败，表示蓝牙可能未开启
        console.log('蓝牙初始化失败', error);
        this.bluetoothNotAvailable();
      }
    });
  },

  getBluetoothState: function() {
    // 获取手机蓝牙状态
    wx.getBluetoothAdapterState({
      success: (res) => {
        console.log('蓝牙状态:', res);
        if (res.available) {
          // 蓝牙已开启，可以继续使用页面
          console.log('蓝牙已开启');
          // 获取景点讲解数据
          this.getExplainData();
        } else {
          // 蓝牙未开启，返回首页
          this.bluetoothNotAvailable();
        }
      },
      fail: (error) => {
        // 获取蓝牙状态失败，也认为蓝牙不可用，返回首页
        console.log('获取蓝牙状态失败', error);
        this.bluetoothNotAvailable();
      }
    });
  },

  bluetoothNotAvailable: function() {
    wx.showToast({
      title: '蓝牙未开启，将返回首页',
      icon: 'none',
      duration: 2000
    });

    // 使用Promise确保在提示显示后再执行跳转
    this.delay(2000).then(() => {
      wx.switchTab({
        url: '/pages/index/index',
        fail: (err) => {
          console.log('switchTab失败，尝试使用navigateTo', err);
          // 如果switchTab失败，尝试使用redirectTo
          wx.redirectTo({
            url: '/pages/index/index',
            fail: (err2) => {
              console.log('redirectTo也失败了', err2);
              // 如果redirectTo也失败，尝试reLaunch
              wx.reLaunch({
                url: '/pages/index/index'
              });
            }
          });
        }
      });
    });
  },

  // 获取景点讲解数据
  getExplainData: function() {
    wx.request({
      url: this.data.baseUrl + 'app/Explain/index',
      method: 'post',
      data: {
        scenic_id: this.data.scenicId
      },
      success: (res) => {
        console.log('景点讲解数据:', res);
        if (res.statusCode === 200 && res.data.code === 1) {
          // 处理数组数据，选择第一个元素
          const explainDataArray = res.data.data || [];
          console.log('解析后的数据数组:', explainDataArray);
          
          if (explainDataArray.length > 0) {
            const explainData = explainDataArray[0]; // 选择数组中的第一个元素
            
            // 处理HTML内容
            const contentNodes = this.parseHtmlContent(explainData.content || '');
            
            this.setData({
              explainData: explainData,
              contentNodes: contentNodes,
              videoUrl: explainData.video ? this.data.baseUrl + explainData.video : '',
              audioUrl: explainData.audio ? this.data.baseUrl + explainData.audio : '',
              imageUrl: explainData.img ? this.data.baseUrl + explainData.img : ''
            }, () => {
              // 数据设置完成后，如果有音频则开始播放背景音频
              if (this.data.audioUrl) {
                this.playBackgroundAudio();
              }
            });
          } else {
            wx.showToast({
              title: '暂无讲解数据',
              icon: 'none'
            });
          }
        } else {
          wx.showToast({
            title: '数据获取失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('请求景点讲解数据失败', err);
        wx.showToast({
          title: '网络请求失败',
          icon: 'none'
        });
      }
    });
  },

  // 播放背景音频
  playBackgroundAudio: function() {
    const backgroundAudioManager = wx.getBackgroundAudioManager();
    
    backgroundAudioManager.title = this.data.explainData.title || '景点讲解';
    backgroundAudioManager.epname = '景点讲解';
    backgroundAudioManager.singer = '讲解员';
    backgroundAudioManager.coverImgUrl = this.data.imageUrl || '';
    
    backgroundAudioManager.src = this.data.audioUrl;
    
    backgroundAudioManager.onPlay(() => {
      console.log('背景音频开始播放');
    });
    
    backgroundAudioManager.onPause(() => {
      console.log('背景音频暂停');
    });
    
    backgroundAudioManager.onStop(() => {
      console.log('背景音频停止');
    });
    
    backgroundAudioManager.onEnded(() => {
      console.log('背景音频播放结束');
    });
    
    backgroundAudioManager.onError((res) => {
      console.log('背景音频播放错误', res);
      wx.showToast({
        title: '音频播放失败',
        icon: 'none'
      });
    });
  },

  // 解析HTML内容为 rich-text 可识别的节点
  parseHtmlContent: function(content) {
    // 简单处理HTML标签，将换行符转换为<br>标签
    if (!content) return [];
    
    // 替换换行符为<br>标签
    content = content.replace(/\n/g, '<br>');
    
    // 返回节点数组
    return content;
  },

  // 返回上一页
  navBack: function() {
    // 不再停止背景音频播放，让用户可以继续听
    wx.navigateBack({
      delta: 1,
      fail: () => {
        // 如果无法返回上一页，则跳转到首页
        wx.switchTab({
          url: '/pages/index/index'
        });
      }
    });
  },

  // 页面卸载时不再停止背景音频
  onUnload: function() {
    // 移除了停止背景音频的代码，让音频可以在页面切换时继续播放
  },

  // 视频播放错误回调
  videoErrorCallback: function(e) {
    console.log('视频播放错误:', e);
    wx.showToast({
      title: '视频加载失败',
      icon: 'none'
    });
  },


  // 延迟函数
  delay: function(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
  }
});